package com.syf.rocket;

import com.alibaba.fastjson.JSON;
import com.syf.model.MessagePayload;
import com.syf.vo.ResponseEntity;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.tio.core.Tio;
import org.tio.websocket.starter.TioWebSocketServerBootstrap;

@Component
@Slf4j
public class RocketMessageListener {

    @Autowired
    private TioWebSocketServerBootstrap tioWebSocketServerBootstrap;

    /**
     * 推送服务：
     *      定时任务 -> 调用event事件 -> 将消息 发生到rocketMQ中 -》 TIO推送(指定用户/主题)到前端
     *
     * 两边先相互握手、建立连接、订阅主题，之后才可以 推送服务给订阅者进行消费
     */
    @StreamListener("tio_group")
    public void handlerMessage(MessagePayload message) { //MessagePayload对象 接收 MQ 里面的消息

        log.info("接收到rocketmq的消息========>{}", JSON.toJSONString(message));
        ResponseEntity responseEntity = new ResponseEntity();
        responseEntity.setCh(message.getChannel());  //推送的 channel
        responseEntity.put("result", message.getBody());  //响应的结果

        // 推送给前端的用户就可以了【推送给指定用户】
        if (StringUtils.hasText(message.getUserId())) {
            Tio.sendToUser(tioWebSocketServerBootstrap.getServerTioConfig(), message.getUserId(), responseEntity.build());
            return;
        }

        //推送指定主题
        @NonNull String group = message.getChannel();
        Tio.sendToGroup(tioWebSocketServerBootstrap.getServerTioConfig(), group, responseEntity.build());
    }
}
